﻿package com.midia.playerVideo.dados {
	
	import flash.net.URLRequest;
	import flash.net.URLLoader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	import com.midia.playerVideo.DadosVideo;
	
	/**
	* Carrega o XML especicado e disponibiliza em forma de arrays de DadosVideo
	* @author Ricardo Teixeira
	*/
	public class CarregaDadosVideo extends EventDispatcher {
		
		private var _dadosVideos:Array;		
		private var _dadosVideosRelacionados:Array;		
		private var dados:URLLoader;		
		private var _principais:XMLList;
		private var _relacionados:XMLList;
		
		public function CarregaDadosVideo ():void {
			this._dadosVideos = new Array ();
			this._dadosVideosRelacionados = new Array ();
			
			this.dados = new URLLoader ();
			this.dados.addEventListener(Event.COMPLETE, this.onLoadDados);			
		}
		
		public function get principais ():XMLList {
			return this._principais;
		}
		
		public function get relacionados ():XMLList {
			return this._relacionados;
		}
		
		/**
		 * Leitura dos videos pricipais
		 */
		public function get dadosVideos ():Array {
			return this._dadosVideos.concat ();
		}
		
		/**
		 * Leitura dos videos relacionados
		 */
		public function get dadosVideosRelacionados ():Array {
			return this._dadosVideosRelacionados.concat ();
		}
		
		/**
		 * Método que carrega o XML especificado parâmetro urlXML
		 * @param	urlXML
		 */
		public function carregar (urlXML:String):void {
			this.dados.load (new URLRequest (urlXML));
			/*try {
                this.dados.load(new URLRequest ("dados.xml"));
            } catch (error:Error) {
               throw new Error ("Impossível carregar dados. Arquivo não encontrado.");
            }*/
		}
		
		public function filtrar (tipo:Number):Array {
			var lista:Array = new Array ();
			for (var i:int = 0; i < this._dadosVideos.length; i++) {
				if (this._dadosVideos[i].tipo == tipo) {
					lista.push (this._dadosVideos[i]);
				}
			}
			return lista;
		}
		
		/**
		 * Manipulador do evento COMPLETE 
		 * @param	evento
		 */
		private function onLoadDados(evento:Event):void	{					
			var dadosLoader:URLLoader = URLLoader(evento.target);
            var dadosXML:XML = new XML (dadosLoader.data);
			dadosXML.ignoreWhitespace = true;
						
			this._principais = dadosXML.pricipais;
			this._relacionados = dadosXML.relacionados;			
			
			var prop:XML;
			for each (prop in dadosXML.pricipais.video) {
				this._dadosVideos.push (new DadosVideo (prop.@titulo, prop.@url, prop.@thumb, Number (prop.@tipo)));
			}
			
			for each (prop in dadosXML.relacionados.video) {
				this._dadosVideosRelacionados.push (new DadosVideo (prop.@titulo, prop.@url, prop.@thumb, Number (prop.@tipo)));
			}
			
			var evt:Event = new Event (Event.COMPLETE);
			this.dispatchEvent (evt);
		}
	} 
}